from django.db import models
from django.core.validators import MinValueValidator, MaxValueValidator


class Product(models.Model):
    """ Описание объекта 'Продукт' в бд """

    name = models.CharField('Наименование', max_length=250)
    description = models.TextField('Описание')
    price = models.DecimalField('Цена', max_digits=7, decimal_places=2)
    order = models.ForeignKey(
        'Order',
        on_delete=models.SET_NULL,
        verbose_name='Относится к заказу',
        null=True
    )

    class Meta:
        verbose_name = 'Продукт'
        verbose_name_plural = 'Продукты'


    def __str__(self):
        return self.name


class Order(models.Model):
    """ Описание объекта 'Заказ' в бд """

    date_of_placing_order = models.DateTimeField(
        'Дата оформления заказа',
        null=True,
        blank=True
    )
    total_price_of_products = models.DecimalField(
        'Цена',
        max_digits=7,
        decimal_places=2,
        null=True,
        blank=True
    )
    paid_for = models.BooleanField(
        'Оплаченный',
        default=False
    )
    discount = models.ForeignKey(
        'Discount',
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        verbose_name='Скидка'
    )
    tax_rates = models.ManyToManyField(
        'TaxRate',
        verbose_name='Налоговые ставки'
    )

    class Meta:
        verbose_name = 'Заказ'
        verbose_name_plural = 'Заказы'

    def __str__(self):
        return str(self.pk)


class Discount(models.Model):
    """ Скидка для заказа """

    percent_off = models.PositiveIntegerField(
        'Процентная скидка',
        validators=[MinValueValidator(0), MaxValueValidator(100)]
    )

    class Meta:
        verbose_name = 'Скидка'
        verbose_name_plural = 'Скидки'

    def __str__(self):
        return str(self.percent_off)


class TaxRate(models.Model):
    """ Налоговая ставка для заказа """

    name = models.CharField('Название', max_length=250)
    precentage = models.PositiveIntegerField(
        'Процентная скидка',
        validators=[MinValueValidator(0), MaxValueValidator(100)]
    )

    class Meta:
        verbose_name = 'Налоговая ставка'
        verbose_name_plural = 'Налоговые ставки'

    def __str__(self):
        return f'{self.name} {self.precentage}'
